package com.niit.cms.service;

import com.niit.cms.entity.Course;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;

import java.util.List;

/**
 * (Course)表服务接口
 *
 * @author makejava
 * @since 2022-06-22 21:42:51
 */
public interface CourseService {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    Course queryById(Integer id);

    /**
     * 按条件查询数据
     *
     * @param course   查询条件
     * @param
     * @return 对象列表
     */
    List<Course> queryListByCourse(Course course);

    /**
     * 按条件查询指定行数据并排序
     *
     *@Param limitSize 查询范围
     * @param sort 排序条件
     * @param course 查询条件
     * @return 对象列表
     *
     */
    List<Course> queryOrderedListByCourseLimit(Course course, String sort, Integer limitSize);

    /**
     * 按条件查询数据并排序
     *
     * @param course   查询条件
     *
     * @return 对象列表
     */
    List<Course> queryOrderedListByCourse(Course course, String sort);

    /**
     * 分页查询
     *
     * @param course      筛选条件
     * @param pageRequest 分页对象
     * @return 查询结果
     */
    Page<Course> queryByPage(Course course, PageRequest pageRequest);


    /**
     * 按分类查询指定行数据并排序
     *
     *@Param limitSize 查询范围
     * @param sort 排序条件
     * @param type 分类
     * @return 对象列表
     *
     */
    List<Course> queryOrderedListByTypeLimit(Integer type, String sort, Integer limitSize);
    /**
     * 按父分类查询全部数据
     *
     *@Param course
     * @return 对象列表
     *
     */
    List<Course> queryListByParentType(Course course);
    /**
     * 按父分类查询全部数据并排序
     *
     *@Param course
     * @Param sort
     * @return 对象列表
     *
     */
    List<Course> queryOrderedListByParentType(Course course, String sort);
    /**
     * 按关键词查询全部数据
     *
     *@Param keyword
     * @return 对象列表
     *
     */
    List<Course> queryListByKeyword(Course course, String keyword);
    /**
     * 按条件和关键词查询数据并排序
     *
     * @param course   查询条件
     * @param sort 排序条件
     * @param keyword 关键词
     * @return 对象列表
     */
    List<Course> queryOrderedListByCourseKeyword(Course course, String sort, String keyword);
    /**
     * 按父分类和关键词查询全部数据并排序
     *
     *@Param course
     * @Param sort
     * @param keyword
     * @return 对象列表
     *
     */
    List<Course> queryOrderedListByParentTypeKeyword(Course course, String sort, String keyword);
    /**
     * 按条件和关键词查询数据
     *
     * @param course   查询条件
     * @param  keyword
     * @return 对象列表
     */
    List<Course> queryListByCourseKeyword(Course course, String keyword);
    /**
     * 按父分类和关键词查询全部数据
     *
     *@Param course
     * @param keyword
     * @return 对象列表
     *
     */
    List<Course> queryListByParentTypeKeyword(Course course, String keyword);
    /**
     * 修改数据
     *
     * @param course
     *
     */
    int update(Course course);
}
